﻿using System.Collections.Generic;

namespace ProblemsSet
{
    public class Problem_73 : BaseProblem
    {
        public override object GetResult()
        {
            const double max = 1 / (double)2;
            const double min = 1 / (double)3;
            const int cnt = 12000;

            var hs = new HashSet<double>();

            for (long d = 2; d <= cnt; d++)
            {
                var mx = (long)(max * (double)d);
                var mn = (long)(min * (double)d);
                for (var n = mx; n > mn; n--)
                {
                    var tmp = n / (double)d;
                    if (tmp >= max) continue;
                    if (tmp <= min) continue;
                    if (hs.Contains(tmp)) continue;
                    hs.Add(tmp);
                }
            }
            return hs.Count;
        }

        public override string Problem
        {
            get
            {
                return @"Consider the fraction, n/d, where n and d are positive integers. If nd and HCF(n,d)=1, it is called a reduced proper fraction.

If we list the set of reduced proper fractions for d  8 in ascending order of size, we get:

1/8, 1/7, 1/6, 1/5, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7, 1/2, 4/7, 3/5, 5/8, 2/3, 5/7, 3/4, 4/5, 5/6, 6/7, 7/8

It can be seen that there are 3 fractions between 1/3 and 1/2.

How many fractions lie between 1/3 and 1/2 in the sorted set of reduced proper fractions for d  12,000?

Note: The upper limit has been changed recently.";
            }
        }

        public override bool IsSolved
        {
            get
            {
                return true;
            }
        }

        public override object Answer
        {
            get
            {
                return 7295372;
            }
        }

    }
}
